package tests;

import common.Untils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.IOException;
import java.time.Duration;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ASUS
 * Date: 2025-04-17
 * Time: 10:54
 */
public class LoginPage extends Untils {
    public static String url = "http://127.0.0.1:8080/login.html";

    public LoginPage() {
        super(url);
    }

    /*
    检查页面是否加载成功
    */
    public void loginPageRight() throws InterruptedException, IOException {
        getScreenShot(getClass().getName());
        // 通过查看页面元素是否存在来检查页面加载成功与否
        driver.findElement(By.cssSelector("body > div.nav"));

//        Thread.sleep(3000);
//        driver.quit();
    }
    /*
    检查登录功能
     */
    // 成功登录
    public void LoginSuc() throws InterruptedException, IOException {
        getScreenShot(getClass().getName());

        // 登录成功测试前可以先 刷新页面 或者 清除一下输入框, 确保输入框中没有文本
        // 方法一: 通过 clear 保证输入框没有文本
//        driver.findElement(By.cssSelector("username")).clear();
//        driver.findElement(By.cssSelector("password")).clear();
        // 方法二: 通过界面刷新操作清除输入框文本
        driver.navigate().refresh();

        driver.findElement(By.cssSelector("#username")).sendKeys("lisi");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        // 加一个等待
         Thread.sleep(1000);
        //有弹窗先解决弹窗
        Alert alert = driver.switchTo().alert();
        alert.accept();
        // 程序执行过快, 导致报错, 加一个显式等待 (是处理弹窗前需要等待, 所以这行代码先不用)
//        WebDriverWait off = new WebDriverWait(driver, Duration.ofSeconds(3));
//        off.until(ExpectedConditions.elementToBeClickable(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")));
        // 通过新页面的图标来检查点击登录之后是否登录成功
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));
        // 通过新页面的标题来再次检查点击登录之后是否登录成功
        String expect = driver.getTitle();
        // 通过断言功能来检查
        assert expect.equals("网页聊天程序");

        getScreenShot(getClass().getName());

        // 回退
        driver.navigate().back();
        // 回退之后就刷新一下页面
        driver.navigate().refresh();
    }

    // 异常登录(账号为空)
    public void LoginFail1() throws InterruptedException, IOException {
        // 清除输入框中原有的内容
        // 方法一: 通过 clear 保证输入框没有文本
//        driver.findElement(By.cssSelector("username")).clear();
//        driver.findElement(By.cssSelector("password")).clear();
        // 方法二: 通过界面刷新操作清除输入框文本
//        driver.navigate().refresh();

        driver.findElement(By.cssSelector("#username")).sendKeys("");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        // 加一个等待
        Thread.sleep(1000);
        //有弹窗先解决弹窗
        Alert alert = driver.switchTo().alert();
        alert.accept();
        // 弹窗解决后再判断是否登录成功, 若登录失败, 则表示还在登录界面
        String u = driver.getCurrentUrl();
        assert u.equals("http://127.0.0.1:8080/login.html");
        // 页面刷新一下, 确保输入框没有文本
        driver.navigate().refresh();

//        driver.quit();
    }

    // 异常登录(密码为空)
    public void LoginFail2() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#username")).sendKeys("lisi");
        driver.findElement(By.cssSelector("#password")).sendKeys("");
        driver.findElement(By.cssSelector("#submit")).click();
        // 加一个等待
        Thread.sleep(1000);
        //有弹窗先解决弹窗
        Alert alert = driver.switchTo().alert();
        alert.accept();
        // 弹窗解决后再判断是否登录成功, 若登录失败, 则表示还在登录界面
        String u = driver.getCurrentUrl();
        assert u.equals("http://127.0.0.1:8080/login.html");
        // 页面刷新一下, 确保输入框没有文本
        driver.navigate().refresh();
//        driver.quit();
    }
    // 异常登录(账号错误)
    public void LoginFail3() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#username")).sendKeys("lisizi");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        // 加一个等待
        Thread.sleep(1000);
        //有弹窗先解决弹窗
        Alert alert = driver.switchTo().alert();
        alert.accept();
        // 弹窗解决后再判断是否登录成功, 若登录失败, 则表示还在登录界面
        String u = driver.getCurrentUrl();
        assert u.equals("http://127.0.0.1:8080/login.html");
        // 页面刷新一下, 确保输入框没有文本
        driver.navigate().refresh();
//        driver.quit();
    }

    // 异常登录(密码错误)
    public void LoginFail4() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#username")).sendKeys("lisi");
        driver.findElement(By.cssSelector("#password")).sendKeys("1234");
        driver.findElement(By.cssSelector("#submit")).click();
        // 加一个等待
        Thread.sleep(1000);
        //有弹窗先解决弹窗
        Alert alert = driver.switchTo().alert();
        alert.accept();
        // 弹窗解决后再判断是否登录成功, 若登录失败, 则表示还在登录界面
        String u = driver.getCurrentUrl();
        assert u.equals("http://127.0.0.1:8080/login.html");
        // 页面刷新一下, 确保输入框没有文本
        driver.navigate().refresh();
//        driver.quit();
        //
        driver.navigate().back();
        driver.navigate().refresh();
    }
}
